/**
 * 
 */

/**
 * @author Medrano
 *
 */
public class SymbolNode<E> implements Comparable<SymbolNode<E>>{
	
	/**
	 * Almacena el simbolo del cual se obtiene la frecuencia
	 */
	public E value;
	
	/**
	 * Contiene la frecuencia del simbolo que almacena este nodo.
	 */
	public int frec;
	
	
	/**
	 * Constructor: permite crear un nuevo nodo indicando el simbolo que almacena y su frecuencia
	 * @param valor		
	 */
	public SymbolNode(E valor, int frecu){
		value = valor;
		frec = frecu;
	}
	
	/**
	 * Permite obtener la frecuencia de este dato
	 * @return
	 */
	public int getFrecuencia(){
		return frec;
	}
	
	/**
	 * Permite obtener el valor o simbolo
	 * @return
	 */
	public E getValue(){
		return value;
	}
	
	/**
	 * Permite establecer un nuevo valor al este SymbolNode
	 * @param newval
	 */
	public void setValue(E newval){
		value = newval;
	}
	
	/**
	 * Permite establecer una nueva Frecuencia al valor de este SymbolNode
	 */
	public void setFrecuencia(int newfrec){
		frec=newfrec;
	}
	
	/**
	 * 
	 */
	public void incFrecuencia(){
		frec+=1;
	}

	/**
	 * Permite comparar dos objetos de tipo SymbolNode utilizando como 
	 * criterio de comparacion su frecuencia
	 * @param SymbolNode<E> arg0  	SymbolNode contra el cual se comparara
	 */
	@Override
	public int compareTo(SymbolNode<E> arg0) {
		// TODO Auto-generated method stub
		//arg0 = (SymbolNode<E>) arg0;
		return (frec - arg0.getFrecuencia());
	}
	
	public String toString(){
		String desc="";
		desc+= "Dato: "+value.toString();
		desc+= "| Frecuencia: "+frec+"\n"; 
		
		return desc;
	}
	

}
